嗨!各位朋友大家好,中秋節快樂,烤肉記得吃飽飽,我是阿圓,一樣有請今天的one piece:
(海軍將懸賞單廣播出去!就像 Pub/Sub 模式!)
昨天講到了早期的推播技術,而隨著這樣的需求越來越大,不同於 HTTP 協定的 Web Socket 便出現了!
先來了解一下甚麼是Websocket ,我們請wiki大大出來說幾句話:
Websocket是一種與HTTP不同的協定。兩者都位於OSI模型的應用層,並且都依賴於傳輸層的TCP協定,雖然它們不同,但Websocket通過HTTP埠80和443進行工作,並支援HTTP代理和中介
(有點像是升級版的HTTP,因為他們還是用同一個 port 工作。)
一言以蔽之,Websocket 是一種讓瀏覽器和伺服器,進行持續性的雙向連線溝通,允許 server 隨時的、主動的向 client 端發送 response 的一種通訊協定
(Websocket 是通過 HTTP/1.1 協定的101狀態碼進行交握(Handshaking),上圖其實就是告訴 server ,我們要走 Websocket 協定,有關更多 Websocket 的詳細介紹,請參考wiki)
利用 Websocket 來通訊的方式有很多種,而 action cable 是採用Pub/Sub的方式。
一般而言,發送訊息的方式以兩種,而Pub/Sub模式,並不是單純的直接將 publisher 發送出去的訊息丟給 subscriber ,而是透過代理層(message broker)的方式將訊息廣播給subscriber。
換句話來說, publisher 跟 subscriber 之間根本不需要知道彼此是誰, 一切都交由中間層的 message broker 來處理。
(相較於 Pub/Sub 另一種模式稱為 observer pattern,有興趣請參考 wiki)
感謝各位看到這邊,明天我們就來實際的看看 Rails 的 action cable 是如何運作的吧!若有任何建議,請各位不吝指教!我們明天見!
官方文件
Difference Between Pub-Sub Pattern and Observable Pattern
Ruby on Rails 實戰聖經